#include <iostream>
using namespace std;
struct person{
string nombre;
int edad;
};
void agregarP(struct person vecp[], int &cantp);
void mostrarP(struct person vecp[],int cantp);
int buscarP(struct person vecp[],string person2,int cantp);
void modP(struct person vecp[],string person2,int cantp);
int promP(struct person vecp[],int cantp);
string jovenP(struct person vecp[],int cantp);
string viejaP(struct person vecp[],int cantp);
void ordenEdadP(struct person vecp[],int cantp);
void ordenNomnreP(struct person vecp[],int cantp);
int main()
{
    struct person vecp[50];
     int cantp=0;
     int i=0;
     string person2;
     int op;
     cout<<"-------------------------------"<<endl;
     cout<<"Menu:"<<endl;
     cout<<"1-Agregar Persona"<<endl;
     cout<<"2-Mostrar Persona"<<endl;
     cout<<"3-Buscar Persona"<<endl;
     cout<<"4-Modificar Persona"<<endl;
     cout<<"5-Promedio de Edad de Persona"<<endl;
     cout<<"6-Persona mas joven"<<endl;
     cout<<"7-Persona mas vieja"<<endl;
     cout<<"8-Orden por edad"<<endl;
     cout<<"9-Orden por nombre"<<endl;
     cout<<"10-Salir"<<endl;
     cin>>op;
     while(op!=10)
     {
        switch(op)
        {
            case 1:
            agregarP(vecp,cantp);
            break;
            case 2:
            mostrarP(vecp,cantp);
            break;
            case 3:
            cout<<"Persona que desea buscar: ";
            cin>>person2;
            cout<<"La edad de su persona es: "<<buscarP(vecp,person2,cantp)<<endl;
            break;
            case 4:
            cout<<"Persona que desea buscar: ";
            cin>>person2;
            modP(vecp,person2,cantp);
            cout<<endl;
            break;
            case 5:
            cout<<"Promedio de edad :"<<promP(vecp,cantp)<<endl;
            break;
            case 6:
            cout<<"La persona mas joven es: "<<jovenP(vecp,cantp)<<endl;
            break;
            case 7:
            cout<<"La persona mas vieja es: "<<viejaP(vecp,cantp)<<endl;
            break;
            case 8:
            ordenEdadP(vecp,cantp);
            break;
            case 9:
            ordenNomnreP(vecp,cantp);
            break;
            case 10:
            break;
        }
        cout<<"Ingrese su Opcion"<<endl;
     cin>>op;
     }

return 1;
}
void agregarP(struct person vecp[], int &cantp)
{
    if(cantp>=50)
    {
        cout<<"ERRROR";
        return;
    }
    if(cantp<50)
    {
        cout<<"Ingrese su Nombre"<<endl;
        cin>>vecp[cantp].nombre;
        cout<<"Ingrese su Edad"<<endl;
        cin>>vecp[cantp].edad;
        cantp++;
    }
return;
}
void mostrarP(struct person vecp[],int cantp)
{
    int i=0;
    while(i<cantp)
    {
       cout<<vecp[i].nombre<<" -- "<<vecp[i].edad<<endl;
       i++;
    }
    cout<<"*************************"<<endl;
    return;
}
int buscarP(struct person vecp[],string person2,int cantp)
{
    int i=0;
    int n;
    while(i<cantp)
    {
        if(person2==vecp[i].nombre)
        {
            n=vecp[i].edad;
        }
        i++;
    }
    return n;
}
void modP(struct person vecp[],string person2,int cantp)
{
    int i=0;
    int n;
    while(i<cantp)
    {

        if(person2==vecp[i].nombre)
        {
            cout<<"Ingrese la nueva edad de la persona: ";
            cin>>n;
            vecp[i].edad=n;
            break;
        }
        i++;
    }
    cout<<"Nueva edad: "<<vecp[i].edad;
return;
}
int promP(struct person vecp[],int cantp)
{
    int i=0;
    int aux=0;
    while(i<cantp)
    {
        aux=vecp[i].edad+aux;
        i++;
    }
    return aux/cantp;
}
string jovenP(struct person vecp[],int cantp)
{
    int i=0;
    int aux=vecp[0].edad;
    string n=vecp[0].nombre;
    while(i<cantp)
    {
            if(vecp[i].edad<aux)
            {
                aux=vecp[i].edad;
                n=vecp[i].nombre;
            }
            i++;
    }
    return n;
}
string viejaP(struct person vecp[],int cantp)
{
    int i=0;
    int aux=vecp[0].edad;
    string n=vecp[0].nombre;
    while(i<cantp)
    {
            if(vecp[i].edad>aux)
            {
                aux=vecp[i].edad;
                n=vecp[i].nombre;
            }
            i++;
    }
    return n;
}
void ordenEdadP(struct person vecp[],int cantp)
{
    struct person aux;
    int i,j,flag;
    for(j=0;j<10;j++)
    {
        flag=1;
        for(i=0;i<(cantp-1);i++)
        {
            if(vecp[i].edad>vecp[i+1].edad)
            {
                flag=0;
                aux=vecp[i];
                vecp[i]=vecp[i+1];
                vecp[i+1]=aux;
            }
        }
        mostrarP(vecp,cantp);
        if(flag==1)
            {
                break;
            }

}
return;
}
void ordenNomnreP(struct person vecp[],int cantp)
{
    struct person aux;
    int i,j,flag;
    for(j=0;j<10;j++)
    {
        flag=1;
        for(i=0;i<(cantp-1);i++)
        {
            if(vecp[i].nombre>vecp[i+1].nombre)
            {
                flag=0;
                aux=vecp[i];
                vecp[i]=vecp[i+1];
                vecp[i+1]=aux;
            }
        }
        mostrarP(vecp,cantp);
        if(flag==1)
            {
                break;
            }

}
return;
}

